package com.ow.dva.module.terminal.controller;


import com.ow.dva.module.base.controller.BaseController;
import com.ow.dva.module.base.entity.json.RT;
import com.ow.dva.module.base.entity.param.DvaPage;
import com.ow.dva.module.park.entity.Park;
import com.ow.dva.module.park.service.ParkService;
import com.ow.dva.module.serverSettings.entity.ServerSettings;
import com.ow.dva.module.serverSettings.service.ServerSettingsService;
import com.ow.dva.module.terminal.entity.Termina;
import com.ow.dva.module.terminal.service.TerminaService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * <p>
 * 终端机表 前端控制器
 * </p>
 *
 * @author JiangYanpeng
 * @since 2020-02-27
 * @version V1.0
 */
@Controller
@Api(tags = "终端机表 相关控制器")
@RequestMapping("/termina")
public class TerminaController extends BaseController {

    /**
    * 分页获取终端机表数据列表信息
    * 创建时间：2020-02-27 JiangYanpeng
    * 修改时间：2020-02-27 JiangYanpeng 加注释
    * 修改时间：
    */
    @ApiOperation(value = "分页获取",notes = "批量获取终端机表信息列表，分页，可携带条件")
    @RequiresPermissions("termina:page")
    @GetMapping(value = "/page")
    public String page(DvaPage<Termina> dvaPage, @RequestParam Map<String, Object> param, Model model){

        DvaPage<Termina> page = terminaService.page(dvaPage,param);
        model.addAttribute("page",page);
        model.addAttribute("param",param);
        return "termina/list";
    }

    /**
    * 进入终端机表添加页面。
    * 创建时间：2020-02-27 JiangYanpeng
    * 修改时间：2020-02-27 JiangYanpeng 加注释
    * 修改时间：
    */
    @ApiOperation(value = "进入添加页面",notes = "进入终端机表添加页面")
    @RequiresPermissions("termina:add")
    @GetMapping(value = "/add")
    public String add( Model model) {
        List<Park> parks = parkService.getParkList();
        model.addAttribute("parks", parks);
        return "termina/add";
    }

    /**
    * 添加终端机表信息。
    * 创建时间：2020-02-27 JiangYanpeng
    * 修改时间：2020-02-27 JiangYanpeng 加注释
    * 修改时间：
    */
    @ApiOperation(value = "添加",notes = "添加单个终端机表信息")
    @RequiresPermissions("termina:add")
    @PostMapping("/save")
    @ResponseBody
    public RT save(Termina termina){

        termina.setCreateTime(new Date());
        termina.setBindStatus(0);

        return terminaService.save(termina) ? RT.ok() : RT.error(RT.ERROR_0101);
    }

    /**
    * 进入终端机表编辑页面。
    * 创建时间：2020-02-27 JiangYanpeng
    * 修改时间：2020-02-27 JiangYanpeng 加注释
    * 修改时间：
    */
    @ApiOperation(value = "进入编辑页面",notes = "进入终端机表编辑页面")
    @RequiresPermissions("termina:edit")
    @GetMapping(value = "/edit")
    public String edit(String id, Model model){

        model.addAttribute("data",terminaService.getById(id));

        return "termina/edit";
    }

    /**
    * 修改终端机表信息。
    * 创建时间：2020-02-27 JiangYanpeng
    * 修改时间：2020-02-27 JiangYanpeng 加注释
    * 修改时间：
    */
    @ApiOperation(value = "修改",notes = "修改单个终端机表信息")
    @RequiresPermissions("termina:edit")
    @PostMapping("/update")
    @ResponseBody
    public RT update(Termina termina){

        return terminaService.updateById(termina) ? RT.ok() : RT.error(1);
    }

    /**
    * 删除单个终端机表信息。
    * 创建时间：2020-02-27 JiangYanpeng
    * 修改时间：2020-02-27 JiangYanpeng 加注释
    * 修改时间：
    */
    @ApiOperation(value = "删除",notes = "删除单个终端机表信息")
    @RequiresPermissions("termina:delete")
    @PostMapping("/delete")
    @ResponseBody
    public RT delete(@ApiParam(name="要删除的终端机表ID") String id){

        return terminaService.removeById(id) ? RT.ok() : RT.error(1);
    }

    /**
    * 批量删除多个终端机表信息。
    * 创建时间：2020-02-27 JiangYanpeng
    * 修改时间：2020-02-27 JiangYanpeng 加注释
    * 修改时间：
    */
    @ApiOperation(value = "批量删除",notes = "批量删除多个终端机表信息")
    @RequiresPermissions("termina:delete")
    @PostMapping("/deleteByIds")
    @ResponseBody
    public RT deleteByIds(@ApiParam(name="要删除的终端机表ID List") @RequestParam List<String> ids){

        return terminaService.removeByIds(ids) ? RT.ok() : RT.error(1);
    }


    @GetMapping(value = "/bindServer")
    public String bindServer(Model model, String terminaId) {
        model.addAttribute("terminaId",terminaId);
        return "termina/bindServer";
    }

    @PostMapping("/saveServer")
    @ResponseBody
    public RT saveServer(ServerSettings serverSettings){

        Termina termina = new Termina();
        termina.setBindStatus(1);
        termina.setId(serverSettings.getTerminaId());
        terminaService.updateById(termina);
        return serverSettingsService.save(serverSettings) ? RT.ok() : RT.error(RT.ERROR_0101);
    }

    @GetMapping(value = "/editServer")
    public String editServer(String terminaId, Model model){

        ServerSettings serverSettings = serverSettingsService.getByTerminaId(terminaId);

        model.addAttribute("data",serverSettings);

        return "serverSettings/edit";
    }
    @Resource
    TerminaService terminaService;
    @Resource
    private ParkService parkService;
    @Resource
    private ServerSettingsService serverSettingsService;
}
